package ink.metoo.auto.fishpi.chatroom

import ink.metoo.auto.fishpi.Settings

class Message {

    /**
     * 消息类型online(在线) / discussChanged(话题变更) / revoke(撤回) / msg(聊天) / redPacketStatus(红包领取)
     */
    var type: String? = null

    /**
     * 	消息 Id
     */
    var oId: String? = null

    // --- discussChanged 话题变更 ---

    var newDiscuss: String? = null

    var whoChanged: String? = null

    // --- online 在线 ---

    /**
     * 话题
     */
    var discussing: String? = null

    /**
     * 在线人数
     */
    var onlineChatCnt: Int? = null

    class User {

        /**
         * 	用户首页
         */
        var homePage: String? = null

        /**
         * 用户头像
         */
        var userAvatarURL: String? = null

        /**
         * 用户名
         */
        var userName: String? = null

    }

    /**
     * 在线用户列表
     */
    var users: List<User> = emptyList()

    // --- msg 聊天 ---

    /**
     * 发布时间
     */
    var time: String? = null

    /**
     * 客户端来源
     */
    var client: String? = null

    /**
     * 消息内容
     */
    var content: String? = null

    /**
     * 用户名
     */
    var userName: String? = null

    /**
     * 用户昵称
     */
    var userNickname: String? = null

    /**
     * 消息内容Markdown
     */
    var md: String? = null


    // --- redPacketStatus 红包领取消息 ---

    /**
     * 红包个数
     */
    var count: Int? = null

    /**
     * 已领取个数
     */
    var got: Int? = null

    /**
     * 发送者用户名
     */
    var whoGive: String? = null

    /**
     * 领取者用户名
     */
    var whoGot: String? = null

    // ---
    var barragerContent: String? = null

    val isMe: Boolean
        get() = userName == Settings.fishpiClient.username

    val isJsonContent: Boolean
        get() = content?.let {
            it.startsWith("{") && it.endsWith("}")
        } == true


    enum class Type(val value: String) {

        /**
         * 在线
         */
        ONLINE("online"),

        /**
         * 话题变更
         */
        DISCUSS_CHANGED("discussChanged"),

        /**
         * 撤回
         */
        REVOKE("revoke"),

        /**
         * 聊天
         */
        MSG("msg"),

        /**
         * 红包领取
         */
        RED_PACKET_STATUS("redPacketStatus"),

        /**
         * 弹幕信息
         */
        BARRAGER("barrager"),

        /**
         * 所有
         */
        ALL("")

    }

}

